# from skimage import data, filters
# from matplotlib import pyplot as plt 
# # img为原始图像
# img = data.camera()
# # 罗伯特交叉梯度算子
# img_robert_pos = filters.roberts_pos_diag(img)
# img_robert_neg = filters.roberts_neg_diag(img)
# img_robert = filters.roberts(img)
# # 显示图像
# plt.rcParams['font.sans-serif'] = ['SimHei'] 
# plt.rcParams['axes.unicode_minus'] = False
# plt.subplot(2, 2, 1)
# plt.axis('off')
# plt.imshow(img, cmap = 'gray')
# plt.title('原图像')
# plt.subplot(2, 2, 2)
# plt.axis('off')
# plt.imshow(img_robert_pos, cmap = 'gray')
# plt.title('robert_pos')
# plt.subplot(2, 2, 3)
# plt.axis('off')
# plt.imshow(img_robert_neg, cmap = 'gray')
# plt.title('robert_neg')
# plt.subplot(2, 2, 4)
# plt.axis('off')
# plt.imshow(img_robert, cmap = 'gray')
# plt.title('robert')
# # plt.savefig('roberts.tif')
# plt.show()



from skimage import data, filters
from matplotlib import pyplot as plt
from skimage.util import random_noise

# img为原始图像
img = data.camera()

# 添加椒盐噪声，这里设置椒盐噪声的比例为0.05（可根据实际需求调整）
noisy_img = random_noise(img, mode='s&p', amount=0.05)
# 将图像的数据类型转换为适合显示的uint8类型（random_noise函数输出的数据类型为float）
noisy_img = (noisy_img * 255).astype('uint8')

# 罗伯特交叉梯度算子
img_robert_pos = filters.roberts_pos_diag(img)
img_robert_neg = filters.roberts_neg_diag(img)
img_robert = filters.roberts(img)

# 显示图像
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(2, 3, 1)
plt.axis('off')
plt.imshow(img, cmap='gray')
plt.title('原图像')

plt.subplot(2, 3, 2)
plt.axis('off')
plt.imshow(noisy_img, cmap='gray')
plt.title('含噪图像')

plt.subplot(2, 3, 4)
plt.axis('off')
plt.imshow(img_robert_pos, cmap='gray')
plt.title('robert_pos')

plt.subplot(2, 3, 5)
plt.axis('off')
plt.imshow(img_robert_neg, cmap='gray')
plt.title('robert_neg')

plt.subplot(2, 3, 6)
plt.axis('off')
plt.imshow(img_robert, cmap='gray')
plt.title('robert')

# plt.savefig('roberts.tif')
plt.show()

from skimage import data, filters
from matplotlib import pyplot as plt
from skimage.util import random_noise
import numpy as np

# img为原始图像
img = data.camera()

# 添加椒盐噪声，这里设置椒盐噪声的比例为0.05（可根据实际需求调整）
noisy_img = random_noise(img, mode='s&p', amount=0.05)
# 将图像的数据类型转换为适合显示的uint8类型（random_noise函数输出的数据类型为float）
noisy_img = (noisy_img * 255).astype('uint8')

# 对含噪图像求罗伯特正对角线边缘图像
noisy_img_robert_pos = filters.roberts_pos_diag(noisy_img)

# 对含噪图像求罗伯特负对角线边缘图像
noisy_img_robert_neg = filters.roberts_neg_diag(noisy_img)

# 对含噪图像求罗伯特梯度图像（先锐化再二值化分割）
# 锐化含噪图像
sharpened_noisy_img = filters.unsharp_mask(noisy_img, radius=1, amount=1)
# 将锐化后的图像像素值限制在0-255之间，并转换为uint8类型
sharpened_noisy_img = (sharpened_noisy_img * 255).clip(0, 255).astype('uint8')
# 获取二值化阈值
thresh = filters.threshold_otsu(sharpened_noisy_img)
# 二值化分割图像
binary_sharpened_noisy_img = sharpened_noisy_img > thresh
# 将二值化后的图像转换为适合显示的uint8类型（二值化后的数据类型为bool，True转换为255，False转换为0）
binary_sharpened_noisy_img = binary_sharpened_noisy_img.astype('uint8') * 255

# 显示图像
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.subplot(2, 3, 1)
plt.axis('off')
plt.imshow(noisy_img, cmap='gray')
plt.title('含噪图像')

plt.subplot(2, 3, 2)
plt.axis('off')
plt.imshow(noisy_img_robert_pos, cmap='gray')
plt.title('含噪图像 - robert_pos')

plt.subplot(2, 3, 3)
plt.axis('off')
plt.imshow(noisy_img_robert_neg, cmap='gray')
plt.title('含噪图像 - robert_neg')

plt.subplot(2, 3, 4)
plt.axis('off')
plt.imshow(binary_sharpened_noisy_img, cmap='gray')
plt.title('含噪图像 - 罗伯特梯度图像')

# plt.savefig('noisy_roberts.tif')
plt.show()